package min.chapter.three;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class InjectionObjectAcquisition {
	public static void main(String[] args) {
		// 스프링컨테이너가 있는 자원의 경로 지정
		ApplicationContext context = new FileSystemXmlApplicationContext("src/min/chapter/three/Injection.xml");
		/*****
		 * ApplicationContext context = new FileSystemXmlApplicationContext("src/min/chapter/three/Injection.xml");
		 BeanFactory 인터페이스 보다는 좀더 다양한 기능을 제공해주는 ApplicationContext 인터페이스를 사용하여 스프링컨테이너 자원의 경로를 지정한다. 자원
		의 경로는 절대경로 지정해야 하므로 src/min/chapter/three/Injection.xml 로
		지정한다.
		******/
		
		// 스프링컨테이너의 bean 객체 획득
		InjectionInetrface obj = (InjectionInetrface) context.getBean("service");
		/*
		 *  getBean 으로 가져오면 최상위 클래스로 가져옴. 그러기 때문에 (InjectionInetrface) 형변환 시켜줌
		 */
		// getBean - bean 가져오라.
		System.out.println("START.....");
		obj.printMessage();
		System.out.println("END.....");
	
		/***** 
		 *  InjectionInetrface obj = (InjectionInetrface) context.getBean("service");
		 InjectionInetrface obj = new InjectionImplement( ); 
		 이라는 형태의 코드가 존재하지 않는다. 보통 해당 class의 메서드를 사용하기 위해서는 반드시 객체가
		있어야 함에도 해당 소스에서는 객체 생성관련 코드가 없다. 그 이유는 스프링
		컨테이너가 해당 class의 객체를 직접 생성하기 때문에 개발자가 직접 코딩할
		필요가 없는 것이다.
		 */
	}
}